From 8a543ab23c541741f8ab3dd93e18c8d4fb17b312 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Fri, 2 Dec 2016 17:32:12 +0100 Subject: [PATCH] iconhelper: Ensure the surface used for textures is ARGB32 --- gtk/gtkiconhelper.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gtk/gtkiconhelper.c b/gtk/gtkiconhelper.c index 5404a3c13d..fcf3bbed72 100644 --- a/gtk/gtkiconhelper.c +++ b/gtk/gtkiconhelper.c @@ -565,6 +565,23 @@ gtk_icon_helper_ensure_texture (GtkIconHelper *self, scale = gtk_widget_get_scale_factor (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self))), _gtk_icon_helper_get_size (self, &width, &height); + + if (cairo_image_surface_get_format (self->priv->rendered_surface) != CAIRO_FORMAT_ARGB32) + { + cairo_surface_t *argb_surface = cairo_surface_create_similar_image (self->priv->rendered_surface, + CAIRO_FORMAT_ARGB32, + width, height); + cairo_t *ct; + cairo_surface_set_device_scale (argb_surface, scale, scale); + + ct = cairo_create (argb_surface); + cairo_set_source_surface (ct, self->priv->rendered_surface, 0, 0); + cairo_paint (ct); + cairo_destroy (ct); + cairo_surface_destroy (self->priv->rendered_surface); + self->priv->rendered_surface = argb_surface; + } + map = cairo_surface_map_to_image (self->priv->rendered_surface, &(GdkRectangle) { 0, 0, width * scale, height * scale}); -- 2.30.2